<?php
namespace Mouta\AmistateBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Sluggable\Util\Urlizer;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
use Mouta\AmistateBundle\Entity\Image;

/**
 * Mouta\AmistateBundle\Entity
 *
 * @ORM\Table(name="usuario",indexes={ @ORM\Index(name="iemail", columns={"email"}), @ORM\Index(name="isexo", columns={"sexo"}), @ORM\Index(name="ibusco", columns={"busco"}), @ORM\Index(name="iultima_actividad", columns={"ultima_actividad"}), @ORM\Index(name="ien_header_at", columns={"en_header_at"}) })
 * @ORM\Entity(repositoryClass="Mouta\AmistateBundle\Entity\UsuarioRepository")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 */
class Usuario extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $fb_id;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank(message="Por favor, ingrese su nombre")
     * @Assert\Length(min=2)
     */
    protected $nombre;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Assert\Length(min=2)
     */
    protected $apellido;

    /**
     * @ORM\Column(type="string", unique=true)
     * @Gedmo\Slug(fields={"nombre"})
     */
    protected $slug;

    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $sexo;

    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $busco;

    /**
     * @ORM\Column(type="date", nullable=true)
     * @Assert\Date()
     */
    protected $cumple;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $pais;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $provincia;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $localidad;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Gedmo\Slug(fields={"pais"}, unique=false)
     */
    protected $seo_pais;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Gedmo\Slug(fields={"provincia"}, unique=false)
     */
    protected $seo_provincia;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Gedmo\Slug(fields={"localidad"}, unique=false)
     */
    protected $seo_localidad;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $lat;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $lng;

    /**
     * @ORM\Column(type="integer")
     */
    protected $para;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=1)
     */
    protected $puntos = 0;

    /**
     * @ORM\Column(type="integer")
     */
    protected $votos = 0;

    /**
     * @ORM\Column(type="integer")
     */
    protected $credito = 0;

    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $reindexar = false;

    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $recibomail = true;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    protected $en_header_at;

    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $listar = false;

    /**
     * @ORM\Column(type="boolean")
     *
     */
    protected $verificado = false;

    /**
     * @ORM\Column(type="date")
     * @Assert\Date()
     */
    protected $ultima_actividad;

    /**
     * @ORM\Column(name="deletedAt", type="datetime", nullable=true)
     */
    private $deletedAt;

    /**
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

    /**
     * @ORM\ManyToMany(targetEntity="Tags", inversedBy="usuarios")
     * @ORM\JoinTable(name="tags_usuario")
     */
    protected $tags;

    /**
     * @ORM\OneToMany(targetEntity="Image", mappedBy="usuario", cascade={"persist", "remove"}, orphanRemoval=true))
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="image", referencedColumnName="id")
     * })
     */
    private $images;

    /**
     * @ORM\OneToMany(targetEntity="Mensaje", mappedBy="usuario_from", cascade={"persist", "remove"}, orphanRemoval=true))
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="usuario_from", referencedColumnName="id")
     * })
     */
    private $mensajes_from;

    /**
     * @ORM\OneToMany(targetEntity="Mensaje", mappedBy="usuario_to", cascade={"persist", "remove"}, orphanRemoval=true))
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="usuario_to", referencedColumnName="id")
     * })
     */
    private $mensajes_to;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $altura;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $hijos;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $estudios;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $religion;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $fumas;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $bebes;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $fisico;

    /**
     * @ORM\Column(type="text", nullable=true)
     * @Assert\Length(min=20)
     */
    protected $descripcion;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $musica;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $peliculas;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $libros;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $tele;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $deportes;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $estado_civil;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $color_pelo;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $nacionalidad;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $trabajo;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $color_ojos;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $vives;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $frase;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $buscas;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $comida;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $cita_ideal;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $web;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Assert\Email()
     */
    protected $msn;

    /**
     * @ORM\Column(type="string", nullable=true)
     * @Assert\Email()
     */
    protected $yahoo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $facebook;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $twitter;

    /**
     * @ORM\Column(type="boolean", nullable=true)
     */
    protected $webcam;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $telefono;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $animales;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    protected $idioma;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    protected $ip;

    /**
     * @ORM\OneToMany(targetEntity="SocialNetwork", mappedBy="usuario", cascade={"persist", "remove"}, orphanRemoval=true))
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="social_network", referencedColumnName="id")
     * })
     */
    protected $social_network;
	
	public function setEmail($email)
    {
		$this->setUsername($email);
        parent::setEmail($email);

        return $this;
    }
	
	public function setEmailCanonical($emailCanonical)
    {
        $this->setUsernameCanonical($emailCanonical);

        return parent::setEmailCanonical($emailCanonical);
    }

    public function getEdad(){
        list($Y,$m,$d) = explode("/",date_format($this->cumple,'Y/m/d'));
        return ( date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y );
    }

    public function serialize()
    {
        return serialize(array($this->fb_id, parent::serialize()));
    }

    public function unserialize($data)
    {
        list($this->fb_id, $parentData) = unserialize($data);
        parent::unserialize($parentData);
    }
	
	public function setSolrId($id)
	{
		$this->id = $id;
	}


    /**
     * @param Array
     */
    public function setFBData($fbdata)
    {
        $this->setSexo(false);
        if (isset($fbdata['id'])) {
            $this->setFbId($fbdata['id']);
        }
        if (isset($fbdata['first_name'])) {
            $this->setNombre($fbdata['first_name']);
        }
        if (isset($fbdata['last_name'])) {
            $this->setApellido($fbdata['last_name']);
        }
        if (isset($fbdata['email'])) {
            $this->setEmail($fbdata['email']);
            $this->setUsername($fbdata['email']);
        } else {
			$mail = substr(md5(uniqid()), 0, 10).'@amistate-not-email.com';
			$this->setEmail($mail);
			$this->setUsername($mail);
		}
        if (isset($fbdata['gender'])) {
            $this->setSexo(($fbdata['gender']=='female')?true:false);
        }
        if (isset($fbdata['birthday'])) {
            $this->setCumple( \DateTime::createFromFormat('m/d/Y', $fbdata['birthday']) );
        }
        $this->setBusco(!$this->getSexo());
        $this->setPara(1);
        $this->setUltimaActividad( new \DateTime() );

    }
	
	public function getUbicacion(){
       $ubicacion = array();
       if($this->pais)
            $ubicacion[] = $this->getPais();
       if($this->provincia)
            $ubicacion[] = $this->getProvincia();
       if($this->localidad)
            $ubicacion[] = $this->getLocalidad();
       return implode(', ', $ubicacion);
	}
	
	public function getSeoUbicacion(){
       $seoUbicacion = array();
       if($this->pais)
            $seoUbicacion[] = $this->getSeoPais();
       if($this->provincia)
            $seoUbicacion[] = $this->getSeoProvincia();
       if($this->localidad)
            $seoUbicacion[] = $this->getSeoLocalidad();
       return implode('-', $seoUbicacion);
	}
	
	public function getImageDefault($force = true)
	{
		$imagenes = $this->getImages();
		foreach($imagenes as $imagen){
            if($imagen->getPrincipal())
				return $imagen;
        }
		if(count($imagenes)>0)
		{
			return $imagenes[0];
		} elseif($force) {
			$img = new Image();
			$img->setUsuario($this);
			return $img;
		}
	}
	
	public function getImagesNoDefault()
	{
		$default = $this->getImageDefault();
		$allImages = $this->getImages();
		$imagenes = array();
		
		foreach($allImages as $imagen){
            if($imagen->getId() != $default->getId())
				$imagenes[] = $imagen;
        }
		return $imagenes;
	}
	
	public function getTextoParaBuscarTags()
	{
		$campos = array();
		$campos[] = $this->getAnimales();
		$campos[] = $this->getBuscas();
		$campos[] = $this->getOpcionesSexo($this->getSexo());
		$campos[] = $this->getCitaIdeal();
		$campos[] = $this->getLocalidad();
		$campos[] = $this->getComida();
		$campos[] = $this->getDeportes();
		$campos[] = $this->getDescripcion();
		//$user->getOpcionesEstadoCivil($user->getEstadoCivil());
		//$user->getOpcionesEstudios($user->getEstudios());
		//$user->getOpcionesFisico($user->getFisico());
		$campos[] = $this->getFrase();
		$campos[] = $this->getIdioma();
		$campos[] = $this->getMusica();
		$campos[] = $this->getNacionalidad();
		$campos[] = $this->getPais();
		//$user->getOpcionesPara($user->getPara());
		$campos[] = $this->getPeliculas();
		$campos[] = $this->getProvincia();
		//$user->getOpcionesReligion($user->getReligion());
		$campos[] = $this->getTele();
		$campos[] = $this->getTrabajo();
		
		if($this->getVives())
			$campos[] = $this->getOpcionesVives($this->getVives());
		//$campos[] = $user->getOpcionesPara($user->getPara());

		$reemplazar = array(',','.',';','-','_'.':','!','(',')','[','<','>',']','%','&','*','?','¿','$','/','|');
		$texto = str_replace($reemplazar, ' ', implode(' ', $campos));
		$reemplazar = array('\n\r','\n','\r',"\n\r","\n","\r");
		$texto = " ".addslashes( str_replace($reemplazar, ' ', $texto) )." ";
		return $texto;
	}


    public static function getOpcionesSexo($opcion = false)
	{
        if($opcion)
		{
            return 'Mujer';
		} else {
            return 'Hombre';
		}
    }
	
    public static function getOpcionesPara($opcion = false)
	{
        $return = array('1'=>'Amistad','2'=>'Relación estable','3'=>'Intimar','4'=>'Citas','5'=>'Intercambio de fotos','6'=>'Otras');
        if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }

    public static function getOpcionesAltura($opcion = false)
	{
		$return = array();
		$return[1] = "<150 cm";
		for($i=2; $i<70; $i++)
		{
				if($i%2)
					$return[$i] = (string)(149+$i)." cm";
		}
		$return[71] = ">220 cm";
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return null;
			}
				
		}
    }
    
    public static function getOpcionesEstudios($opcion = false)
	{
		$return = array('1'=>'Sin estudios','2'=>'Primaria','3'=>'Secundaria','4'=>'Terciaria','5'=>'Universitaria','6'=>'Post grado','7'=>'Master','8'=>'Doctorado');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return null;
			}
				
		}
    }
    
    public static function getOpcionesFisico($opcion = false)
	{
		$return = array('1'=>'Esbelto','2'=>'Musculoso','3'=>'Normal','4'=>'Con kilos de más');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[3];
			}
				
		}
    }
    
    public static function getOpcionesEstadoCivil($opcion = false)
	{
		$return = array('1'=>'Soltero','2'=>'Casado','3'=>'En pareja','4'=>'Divorciado','5'=>'Separado','6'=>'Viudo');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }
    
    public static function getOpcionesColorPelo($opcion = false)
	{
        $return = array('1'=>'Morocho','2'=>'Rubio','3'=>'Castaño','4'=>'Pelirrojo','5'=>'Teñido','6'=>'Calvo','7'=>'Otro');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return null;
			}
				
		}
    }
    
    public static function getOpcionesColorOjos($opcion = false)
	{
		$return = array('1'=>'Negros','2'=>'Marrones','3'=>'Grises','4'=>'Verdes','5'=>'Azules','6'=>'Otros');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return null;
			}
				
		}
    }
    
    public static function getOpcionesVives($opcion = false)
	{
		$return = array('1'=>'Solo','2'=>'Con mis padres','3'=>'Comparto habitación','4'=>'Con mi pareja','5'=>'Otro');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return null;
			}
				
		}
    }
    
    public static function getOpcionesWebcam($opcion = false)
	{
		$return = array('1'=>'No','2'=>'Si');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }
    
    public static function getOpcionesHijos($opcion = false)
	{
		$return = array('1'=>'Ninguno','2'=>'1','3'=>'2','4'=>'3','5'=>'4','6'=>'5','7'=>'6','8'=>'7','9'=>'Más de 7');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }
    
    public static function getOpcionesReligion($opcion = false)
	{
		$return = array('1'=>'Ninguna','2'=>'Cristianismo','3'=>'Judaísmo','4'=>'Budismo','5'=>'Islamismo','6'=>'Hinduismo','7'=>'Otra');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }
    
    public static function getOpcionesFumas($opcion = false)
	{
		$return = array('1'=>'No','2'=>'De 0 a 10','3'=>'De 10 a 20','4'=>'De 20 a 30','5'=>'Más de 30');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }
    
    public static function getOpcionesBebes($opcion = false)
	{
		$return = array('1'=>'No','2'=>'Poco','3'=>'Frecuentemente','4'=>'Mucho');
		if($opcion === false)
		{
            return $return;
		} else {
			if(isset($return[$opcion]))
			{
				return $return[$opcion];
			} else {
				return $return[1];
			}
				
		}
    }

    public function getSocial($tipo)
    {
        foreach($this->getSocialNetwork() as $social)
        {
            if($social->getTipo() == $tipo)
            {
                return $social;
            }
        }
    }

    public function refreshFacebookPost($app_id, $secret)
    {
        if($social = $this->getSocial(1))
        {
            try
            {
                $config = array(
                    'appId' => $app_id,
                    'secret' => $secret,
                    'allowSignedRequest' => false,
                );

                $facebook = new \Facebook($config);
                $facebook->setAccessToken($social->getToken());

                $posts = $facebook->api('/' . $social->getExternalId() . '/statuses')['data'];
                $social->setLastPosts($posts);
                return $social;
            }catch(\Exception $e){}
        }
        return null;
    }

    public function refreshTwitterPost($app_id, $secret, $callbackUrl)
    {
        if($social = $this->getSocial(2))
        {
            try
            {
                $storage = new \OAuth\Common\Storage\Session();

                $token = new \OAuth\OAuth1\Token\StdOAuth1Token();
                $token->setAccessToken($social->getToken());
                $token->setAccessTokenSecret($social->getSecret());


                $credentials = new \OAuth\Common\Consumer\Credentials(
                    $app_id,
                    $secret,
                    $callbackUrl
                );
                $serviceFactory = new \OAuth\ServiceFactory();
                $serviceFactory->setHttpClient(new \OAuth\Common\Http\Client\CurlClient());

                $storage->storeAccessToken('Twitter', $token);

                $twitterService = $serviceFactory->createService('twitter', $credentials, $storage);


                $posts = json_decode($twitterService->request('statuses/user_timeline.json?user_id=' . $social->getExternalId() . '&exclude_replies=true&include_rts=false'), true);
                if(isset($posts['errors']))
                {
                    //$social->setLastPosts(array());
                    $social->setToken(null);
                    $social->setSecret(null);
                }
                else
                {
                    $social->setLastPosts($posts);
                }

                return $social;
            }catch(\Exception $e){ }
        }
        return null;
    }

    /**
     * Constructor
     */
    public function __construct()
    {
        parent::__construct();
        $this->tags = new \Doctrine\Common\Collections\ArrayCollection();
        $this->images = new \Doctrine\Common\Collections\ArrayCollection();
		$this->setUltimaActividad(new \DateTime());
    }
    
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set fb_id
     *
     * @param integer $fbId
     * @return Usuario
     */
    public function setFbId($fbId)
    {
        $this->fb_id = $fbId;

        return $this;
    }

    /**
     * Get fb_id
     *
     * @return integer 
     */
    public function getFbId()
    {
        return $this->fb_id;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     * @return Usuario
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;
    
        return $this;
    }

    /**
     * Get nombre
     *
     * @return string 
     */
    public function getNombre()
    {
        return $this->nombre;
    }

    /**
     * Set apellido
     *
     * @param string $apellido
     * @return Usuario
     */
    public function setApellido($apellido)
    {
        $this->apellido = $apellido;
    
        return $this;
    }

    /**
     * Get apellido
     *
     * @return string 
     */
    public function getApellido()
    {
        return $this->apellido;
    }

    /**
     * Set slug
     *
     * @param string $slug
     * @return Usuario
     */
    public function setSlug($slug)
    {
        $this->slug = $slug;
    
        return $this;
    }

    /**
     * Get slug
     *
     * @return string 
     */
    public function getSlug()
    {
        return $this->slug;
    }

    /**
     * Set sexo
     *
     * @param boolean $sexo
     * @return Usuario
     */
    public function setSexo($sexo)
    {
        $this->sexo = $sexo;
    
        return $this;
    }

    /**
     * Get sexo
     *
     * @return boolean 
     */
    public function getSexo()
    {
        return $this->sexo;
    }

    /**
     * Set busco
     *
     * @param boolean $busco
     * @return Usuario
     */
    public function setBusco($busco)
    {
        $this->busco = $busco;
    
        return $this;
    }

    /**
     * Get busco
     *
     * @return boolean 
     */
    public function getBusco()
    {
        return $this->busco;
    }

    /**
     * Set cumple
     *
     * @param \DateTime $cumple
     * @return Usuario
     */
    public function setCumple($cumple)
    {
        $this->cumple = $cumple;
    
        return $this;
    }

    /**
     * Get cumple
     *
     * @return \DateTime 
     */
    public function getCumple()
    {
        return $this->cumple;
    }

    /**
     * Set pais
     *
     * @param string $pais
     * @return Usuario
     */
    public function setPais($pais)
    {
        $this->pais = $pais;
    
        return $this;
    }

    /**
     * Get pais
     *
     * @return string 
     */
    public function getPais()
    {
        return $this->pais;
    }

    /**
     * Set provincia
     *
     * @param string $provincia
     * @return Usuario
     */
    public function setProvincia($provincia)
    {
        $this->provincia = $provincia;
    
        return $this;
    }

    /**
     * Get provincia
     *
     * @return string 
     */
    public function getProvincia()
    {
        return $this->provincia;
    }

    /**
     * Set localidad
     *
     * @param string $localidad
     * @return Usuario
     */
    public function setLocalidad($localidad)
    {
        $this->localidad = $localidad;
    
        return $this;
    }

    /**
     * Get localidad
     *
     * @return string 
     */
    public function getLocalidad()
    {
        return $this->localidad;
    }

    /**
     * Set seo_pais
     *
     * @param string $seoPais
     * @return Usuario
     */
    public function setSeoPais($seoPais)
    {
        $this->seo_pais = $seoPais;
    
        return $this;
    }

    /**
     * Get seo_pais
     *
     * @return string 
     */
    public function getSeoPais()
    {
        return $this->seo_pais;
    }

    /**
     * Set seo_provincia
     *
     * @param string $seoProvincia
     * @return Usuario
     */
    public function setSeoProvincia($seoProvincia)
    {
        $this->seo_provincia = $seoProvincia;
    
        return $this;
    }

    /**
     * Get seo_provincia
     *
     * @return string 
     */
    public function getSeoProvincia()
    {
        return $this->seo_provincia;
    }

    /**
     * Set seo_localidad
     *
     * @param string $seoLocalidad
     * @return Usuario
     */
    public function setSeoLocalidad($seoLocalidad)
    {
        $this->seo_localidad = $seoLocalidad;
    
        return $this;
    }

    /**
     * Get seo_localidad
     *
     * @return string 
     */
    public function getSeoLocalidad()
    {
        return $this->seo_localidad;
    }

    /**
     * Set lat
     *
     * @param string $lat
     * @return Usuario
     */
    public function setLat($lat)
    {
        $this->lat = $lat;
    
        return $this;
    }

    /**
     * Get lat
     *
     * @return string 
     */
    public function getLat()
    {
        return $this->lat;
    }

    /**
     * Set lng
     *
     * @param string $lng
     * @return Usuario
     */
    public function setLng($lng)
    {
        $this->lng = $lng;
    
        return $this;
    }

    /**
     * Get lng
     *
     * @return string 
     */
    public function getLng()
    {
        return $this->lng;
    }

    /**
     * Set para
     *
     * @param integer $para
     * @return Usuario
     */
    public function setPara($para)
    {
        $this->para = $para;
    
        return $this;
    }

    /**
     * Get para
     *
     * @return integer 
     */
    public function getPara()
    {
        return $this->para;
    }

    /**
     * Set puntos
     *
     * @param float $puntos
     * @return Usuario
     */
    public function setPuntos($puntos)
    {
        $this->puntos = $puntos;
    
        return $this;
    }

    /**
     * Get puntos
     *
     * @return float 
     */
    public function getPuntos()
    {
        return $this->puntos;
    }

    /**
     * Set votos
     *
     * @param integer $votos
     * @return Usuario
     */
    public function setVotos($votos)
    {
        $this->votos = $votos;
    
        return $this;
    }

    /**
     * Get votos
     *
     * @return integer 
     */
    public function getVotos()
    {
        return $this->votos;
    }

    /**
     * Set credito
     *
     * @param integer $credito
     * @return Usuario
     */
    public function setCredito($credito)
    {
        $this->credito = $credito;
    
        return $this;
    }

    /**
     * Get credito
     *
     * @return integer 
     */
    public function getCredito()
    {
        return $this->credito;
    }

    /**
     * Set reindexar
     *
     * @param boolean $reindexar
     * @return Usuario
     */
    public function setReindexar($reindexar)
    {
        $this->reindexar = $reindexar;
    
        return $this;
    }

    /**
     * Get reindexar
     *
     * @return boolean 
     */
    public function getReindexar()
    {
        return $this->reindexar;
    }

    /**
     * Set recibomail
     *
     * @param boolean $recibomail
     * @return Usuario
     */
    public function setRecibomail($recibomail)
    {
        $this->recibomail = $recibomail;
    
        return $this;
    }

    /**
     * Get recibomail
     *
     * @return boolean 
     */
    public function getRecibomail()
    {
        return $this->recibomail;
    }

    /**
     * Set en_header_at
     *
     * @param \DateTime $enHeaderAt
     * @return Usuario
     */
    public function setEnHeaderAt($enHeaderAt)
    {
        $this->en_header_at = $enHeaderAt;
    
        return $this;
    }

    /**
     * Get en_header_at
     *
     * @return \DateTime 
     */
    public function getEnHeaderAt()
    {
        return $this->en_header_at;
    }

    /**
     * Set listar
     *
     * @param boolean $listar
     * @return Usuario
     */
    public function setListar($listar)
    {
        $this->listar = $listar;
    
        return $this;
    }

    /**
     * Get listar
     *
     * @return boolean 
     */
    public function getListar()
    {
        return $this->listar;
    }

    /**
     * Set verificado
     *
     * @param boolean $verificado
     * @return Usuario
     */
    public function setVerificado($verificado)
    {
        $this->verificado = $verificado;
    
        return $this;
    }

    /**
     * Get verificado
     *
     * @return boolean 
     */
    public function getVerificado()
    {
        return $this->verificado;
    }

    /**
     * Set ultima_actividad
     *
     * @param \DateTime $ultimaActividad
     * @return Usuario
     */
    public function setUltimaActividad($ultimaActividad)
    {
        $this->ultima_actividad = $ultimaActividad;
    
        return $this;
    }

    /**
     * Get ultima_actividad
     *
     * @return \DateTime 
     */
    public function getUltimaActividad()
    {
        return $this->ultima_actividad;
    }

    /**
     * Set deletedAt
     *
     * @param \DateTime $deletedAt
     * @return Usuario
     */
    public function setDeletedAt($deletedAt)
    {
        $this->deletedAt = $deletedAt;
    
        return $this;
    }

    /**
     * Get deletedAt
     *
     * @return \DateTime 
     */
    public function getDeletedAt()
    {
        return $this->deletedAt;
    }

    /**
     * Set created
     *
     * @param \DateTime $created
     * @return Usuario
     */
    public function setCreated($created)
    {
        $this->created = $created;
    
        return $this;
    }

    /**
     * Get created
     *
     * @return \DateTime 
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set updated
     *
     * @param \DateTime $updated
     * @return Usuario
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;
    
        return $this;
    }

    /**
     * Get updated
     *
     * @return \DateTime 
     */
    public function getUpdated()
    {
        return $this->updated;
    }

    /**
     * Set altura
     *
     * @param integer $altura
     * @return Usuario
     */
    public function setAltura($altura)
    {
        $this->altura = $altura;
    
        return $this;
    }

    /**
     * Get altura
     *
     * @return integer 
     */
    public function getAltura()
    {
        return $this->altura;
    }

    /**
     * Set hijos
     *
     * @param integer $hijos
     * @return Usuario
     */
    public function setHijos($hijos)
    {
        $this->hijos = $hijos;
    
        return $this;
    }

    /**
     * Get hijos
     *
     * @return integer 
     */
    public function getHijos()
    {
        return $this->hijos;
    }

    /**
     * Set estudios
     *
     * @param integer $estudios
     * @return Usuario
     */
    public function setEstudios($estudios)
    {
        $this->estudios = $estudios;
    
        return $this;
    }

    /**
     * Get estudios
     *
     * @return integer 
     */
    public function getEstudios()
    {
        return $this->estudios;
    }

    /**
     * Set religion
     *
     * @param integer $religion
     * @return Usuario
     */
    public function setReligion($religion)
    {
        $this->religion = $religion;
    
        return $this;
    }

    /**
     * Get religion
     *
     * @return integer 
     */
    public function getReligion()
    {
        return $this->religion;
    }

    /**
     * Set fumas
     *
     * @param integer $fumas
     * @return Usuario
     */
    public function setFumas($fumas)
    {
        $this->fumas = $fumas;
    
        return $this;
    }

    /**
     * Get fumas
     *
     * @return integer 
     */
    public function getFumas()
    {
        return $this->fumas;
    }

    /**
     * Set bebes
     *
     * @param integer $bebes
     * @return Usuario
     */
    public function setBebes($bebes)
    {
        $this->bebes = $bebes;
    
        return $this;
    }

    /**
     * Get bebes
     *
     * @return integer 
     */
    public function getBebes()
    {
        return $this->bebes;
    }

    /**
     * Set fisico
     *
     * @param integer $fisico
     * @return Usuario
     */
    public function setFisico($fisico)
    {
        $this->fisico = $fisico;
    
        return $this;
    }

    /**
     * Get fisico
     *
     * @return integer 
     */
    public function getFisico()
    {
        return $this->fisico;
    }

    /**
     * Set descripcion
     *
     * @param string $descripcion
     * @return Usuario
     */
    public function setDescripcion($descripcion)
    {
        $this->descripcion = $descripcion;
    
        return $this;
    }

    /**
     * Get descripcion
     *
     * @return string 
     */
    public function getDescripcion()
    {
        return $this->descripcion;
    }

    /**
     * Set musica
     *
     * @param string $musica
     * @return Usuario
     */
    public function setMusica($musica)
    {
        $this->musica = $musica;
    
        return $this;
    }

    /**
     * Get musica
     *
     * @return string 
     */
    public function getMusica()
    {
        return $this->musica;
    }

    /**
     * Set peliculas
     *
     * @param string $peliculas
     * @return Usuario
     */
    public function setPeliculas($peliculas)
    {
        $this->peliculas = $peliculas;
    
        return $this;
    }

    /**
     * Get peliculas
     *
     * @return string 
     */
    public function getPeliculas()
    {
        return $this->peliculas;
    }

    /**
     * Set libros
     *
     * @param string $libros
     * @return Usuario
     */
    public function setLibros($libros)
    {
        $this->libros = $libros;
    
        return $this;
    }

    /**
     * Get libros
     *
     * @return string 
     */
    public function getLibros()
    {
        return $this->libros;
    }

    /**
     * Set tele
     *
     * @param string $tele
     * @return Usuario
     */
    public function setTele($tele)
    {
        $this->tele = $tele;
    
        return $this;
    }

    /**
     * Get tele
     *
     * @return string 
     */
    public function getTele()
    {
        return $this->tele;
    }

    /**
     * Set deportes
     *
     * @param string $deportes
     * @return Usuario
     */
    public function setDeportes($deportes)
    {
        $this->deportes = $deportes;
    
        return $this;
    }

    /**
     * Get deportes
     *
     * @return string 
     */
    public function getDeportes()
    {
        return $this->deportes;
    }

    /**
     * Set estado_civil
     *
     * @param integer $estadoCivil
     * @return Usuario
     */
    public function setEstadoCivil($estadoCivil)
    {
        $this->estado_civil = $estadoCivil;
    
        return $this;
    }

    /**
     * Get estado_civil
     *
     * @return integer 
     */
    public function getEstadoCivil()
    {
        return $this->estado_civil;
    }

    /**
     * Set color_pelo
     *
     * @param integer $colorPelo
     * @return Usuario
     */
    public function setColorPelo($colorPelo)
    {
        $this->color_pelo = $colorPelo;
    
        return $this;
    }

    /**
     * Get color_pelo
     *
     * @return integer 
     */
    public function getColorPelo()
    {
        return $this->color_pelo;
    }

    /**
     * Set nacionalidad
     *
     * @param string $nacionalidad
     * @return Usuario
     */
    public function setNacionalidad($nacionalidad)
    {
        $this->nacionalidad = $nacionalidad;
    
        return $this;
    }

    /**
     * Get nacionalidad
     *
     * @return string 
     */
    public function getNacionalidad()
    {
        return $this->nacionalidad;
    }

    /**
     * Set trabajo
     *
     * @param string $trabajo
     * @return Usuario
     */
    public function setTrabajo($trabajo)
    {
        $this->trabajo = $trabajo;
    
        return $this;
    }

    /**
     * Get trabajo
     *
     * @return string 
     */
    public function getTrabajo()
    {
        return $this->trabajo;
    }

    /**
     * Set color_ojos
     *
     * @param integer $colorOjos
     * @return Usuario
     */
    public function setColorOjos($colorOjos)
    {
        $this->color_ojos = $colorOjos;
    
        return $this;
    }

    /**
     * Get color_ojos
     *
     * @return integer 
     */
    public function getColorOjos()
    {
        return $this->color_ojos;
    }

    /**
     * Set vives
     *
     * @param integer $vives
     * @return Usuario
     */
    public function setVives($vives)
    {
        $this->vives = $vives;
    
        return $this;
    }

    /**
     * Get vives
     *
     * @return integer 
     */
    public function getVives()
    {
        return $this->vives;
    }

    /**
     * Set frase
     *
     * @param string $frase
     * @return Usuario
     */
    public function setFrase($frase)
    {
        $this->frase = $frase;
    
        return $this;
    }

    /**
     * Get frase
     *
     * @return string 
     */
    public function getFrase()
    {
        return $this->frase;
    }

    /**
     * Set buscas
     *
     * @param string $buscas
     * @return Usuario
     */
    public function setBuscas($buscas)
    {
        $this->buscas = $buscas;
    
        return $this;
    }

    /**
     * Get buscas
     *
     * @return string 
     */
    public function getBuscas()
    {
        return $this->buscas;
    }

    /**
     * Set comida
     *
     * @param string $comida
     * @return Usuario
     */
    public function setComida($comida)
    {
        $this->comida = $comida;
    
        return $this;
    }

    /**
     * Get comida
     *
     * @return string 
     */
    public function getComida()
    {
        return $this->comida;
    }

    /**
     * Set cita_ideal
     *
     * @param string $citaIdeal
     * @return Usuario
     */
    public function setCitaIdeal($citaIdeal)
    {
        $this->cita_ideal = $citaIdeal;
    
        return $this;
    }

    /**
     * Get cita_ideal
     *
     * @return string 
     */
    public function getCitaIdeal()
    {
        return $this->cita_ideal;
    }

    /**
     * Set web
     *
     * @param string $web
     * @return Usuario
     */
    public function setWeb($web)
    {
        $this->web = $web;
    
        return $this;
    }

    /**
     * Get web
     *
     * @return string 
     */
    public function getWeb()
    {
        return $this->web;
    }

    /**
     * Set msn
     *
     * @param string $msn
     * @return Usuario
     */
    public function setMsn($msn)
    {
        $this->msn = $msn;
    
        return $this;
    }

    /**
     * Get msn
     *
     * @return string 
     */
    public function getMsn()
    {
        return $this->msn;
    }

    /**
     * Set yahoo
     *
     * @param string $yahoo
     * @return Usuario
     */
    public function setYahoo($yahoo)
    {
        $this->yahoo = $yahoo;
    
        return $this;
    }

    /**
     * Get yahoo
     *
     * @return string 
     */
    public function getYahoo()
    {
        return $this->yahoo;
    }

    /**
     * Set facebook
     *
     * @param string $facebook
     * @return Usuario
     */
    public function setFacebook($facebook)
    {
        $this->facebook = $facebook;
    
        return $this;
    }

    /**
     * Get facebook
     *
     * @return string 
     */
    public function getFacebook()
    {
        return $this->facebook;
    }

    /**
     * Set twitter
     *
     * @param string $twitter
     * @return Usuario
     */
    public function setTwitter($twitter)
    {
        $this->twitter = $twitter;
    
        return $this;
    }

    /**
     * Get twitter
     *
     * @return string 
     */
    public function getTwitter()
    {
        return $this->twitter;
    }

    /**
     * Set webcam
     *
     * @param boolean $webcam
     * @return Usuario
     */
    public function setWebcam($webcam)
    {
        $this->webcam = $webcam;
    
        return $this;
    }

    /**
     * Get webcam
     *
     * @return boolean 
     */
    public function getWebcam()
    {
        return $this->webcam;
    }

    /**
     * Set telefono
     *
     * @param string $telefono
     * @return Usuario
     */
    public function setTelefono($telefono)
    {
        $this->telefono = $telefono;
    
        return $this;
    }

    /**
     * Get telefono
     *
     * @return string 
     */
    public function getTelefono()
    {
        return $this->telefono;
    }

    /**
     * Set animales
     *
     * @param string $animales
     * @return Usuario
     */
    public function setAnimales($animales)
    {
        $this->animales = $animales;
    
        return $this;
    }

    /**
     * Get animales
     *
     * @return string 
     */
    public function getAnimales()
    {
        return $this->animales;
    }

    /**
     * Set idioma
     *
     * @param string $idioma
     * @return Usuario
     */
    public function setIdioma($idioma)
    {
        $this->idioma = $idioma;
    
        return $this;
    }

    /**
     * Get idioma
     *
     * @return string 
     */
    public function getIdioma()
    {
        return $this->idioma;
    }

    /**
     * Add tags
     *
     * @param \Mouta\AmistateBundle\Entity\Tags $tags
     * @return Usuario
     */
    public function addTag(\Mouta\AmistateBundle\Entity\Tags $tags)
    {
        $this->tags[] = $tags;
    
        return $this;
    }

    /**
     * Remove tags
     *
     * @param \Mouta\AmistateBundle\Entity\Tags $tags
     */
    public function removeTag(\Mouta\AmistateBundle\Entity\Tags $tags)
    {
        $this->tags->removeElement($tags);
    }

    /**
     * Get tags
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getTags()
    {
        return $this->tags;
    }

    /**
     * Add images
     *
     * @param \Mouta\AmistateBundle\Entity\Image $images
     * @return Usuario
     */
    public function addImage(\Mouta\AmistateBundle\Entity\Image $images)
    {
        $this->images[] = $images;
    
        return $this;
    }

    /**
     * Remove images
     *
     * @param \Mouta\AmistateBundle\Entity\Image $images
     */
    public function removeImage(\Mouta\AmistateBundle\Entity\Image $images)
    {
        $this->images->removeElement($images);
    }

    /**
     * Get images
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getImages()
    {
        return $this->images;
    }

    /**
     * Set ip
     *
     * @param string $ip
     * @return Usuario
     */
    public function setIp($ip)
    {
        $this->ip = $ip;

        return $this;
    }

    /**
     * Get ip
     *
     * @return string
     */
    public function getIp()
    {
        return $this->ip;
    }


    /**
     * Add social_network
     *
     * @param \Mouta\AmistateBundle\Entity\SocialNetwork $socialNetwork
     *
     * @return Usuario
     */
    public function addSocialNetwork(\Mouta\AmistateBundle\Entity\SocialNetwork $socialNetwork)
    {
        $this->social_network[] = $socialNetwork;

        return $this;
    }

    /**
     * Remove social_network
     *
     * @param \Mouta\AmistateBundle\Entity\SocialNetwork $socialNetwork
     */
    public function removeSocialNetwork(\Mouta\AmistateBundle\Entity\SocialNetwork $socialNetwork)
    {
        $this->social_network->removeElement($socialNetwork);
    }

    /**
     * Get social_network
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getSocialNetwork()
    {
        return $this->social_network;
    }


    /**
     * Add mensajes_from
     *
     * @param \Mouta\AmistateBundle\Entity\Mensaje $mensajesFrom
     *
     * @return Usuario
     */
    public function addMensajesFrom(\Mouta\AmistateBundle\Entity\Mensaje $mensajesFrom)
    {
        $this->mensajes_from[] = $mensajesFrom;

        return $this;
    }

    /**
     * Remove mensajes_from
     *
     * @param \Mouta\AmistateBundle\Entity\Mensaje $mensajesFrom
     */
    public function removeMensajesFrom(\Mouta\AmistateBundle\Entity\Mensaje $mensajesFrom)
    {
        $this->mensajes_from->removeElement($mensajesFrom);
    }

    /**
     * Get mensajes_from
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMensajesFrom()
    {
        return $this->mensajes_from;
    }

    /**
     * Add mensajes_to
     *
     * @param \Mouta\AmistateBundle\Entity\Mensaje $mensajesTo
     *
     * @return Usuario
     */
    public function addMensajesTo(\Mouta\AmistateBundle\Entity\Mensaje $mensajesTo)
    {
        $this->mensajes_to[] = $mensajesTo;

        return $this;
    }

    /**
     * Remove mensajes_to
     *
     * @param \Mouta\AmistateBundle\Entity\Mensaje $mensajesTo
     */
    public function removeMensajesTo(\Mouta\AmistateBundle\Entity\Mensaje $mensajesTo)
    {
        $this->mensajes_to->removeElement($mensajesTo);
    }

    /**
     * Get mensajes_to
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getMensajesTo()
    {
        return $this->mensajes_to;
    }
}
